package cn.edu.sdjzu.xg23.kcsj01_backend.utils;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * 拼音工具类，用于获取中文的拼音首字母或全拼
 */
public class PinyinUtil {

    /**
     * 获取字符串的拼音首字母（大写）
     * @param str 输入字符串
     * @return 拼音首字母组成的字符串
     */
    public static String getInitials(String str) {
        if (str == null || str.trim().isEmpty()) {
            return "";
        }

        StringBuilder initials = new StringBuilder();
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        for (char c : str.toCharArray()) {
            // 如果是中文
            if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
                try {
                    String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
                    if (pinyinArray != null && pinyinArray.length > 0) {
                        initials.append(pinyinArray[0].charAt(0));
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    // 处理异常，这里可以记录日志
                    initials.append(c);
                }
            } else {
                // 非中文字符直接添加
                initials.append(c);
            }
        }

        return initials.toString();
    }

    /**
     * 获取字符串的全拼（小写，无音调）
     * @param str 输入字符串
     * @return 全拼字符串
     */
    public static String getFullPinyin(String str) {
        if (str == null || str.trim().isEmpty()) {
            return "";
        }

        StringBuilder fullPinyin = new StringBuilder();
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        for (char c : str.toCharArray()) {
            // 如果是中文
            if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
                try {
                    String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
                    if (pinyinArray != null && pinyinArray.length > 0) {
                        fullPinyin.append(pinyinArray[0]);
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    // 处理异常，这里可以记录日志
                    fullPinyin.append(c);
                }
            } else {
                // 非中文字符直接添加
                fullPinyin.append(c);
            }
        }

        return fullPinyin.toString();
    }

    /**
     * 获取中文姓名的拼音缩写（例如：张三 -> ZS）
     * @param name 中文姓名
     * @return 拼音缩写（大写）
     */
    public static String getNameAbbreviation(String name) {
        if (name == null || name.trim().isEmpty()) {
            return "";
        }

        StringBuilder abbreviation = new StringBuilder();
        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);

        for (char c : name.toCharArray()) {
            // 如果是中文
            if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
                try {
                    String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
                    if (pinyinArray != null && pinyinArray.length > 0) {
                        abbreviation.append(pinyinArray[0].charAt(0));
                    }
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    // 处理异常
                    abbreviation.append(c);
                }
            } else {
                // 非中文字符直接添加
                abbreviation.append(c);
            }
        }

        return abbreviation.toString();
    }

    public static void main(String[] args) {
        // 测试示例
        String name = "张三";
        System.out.println("姓名: " + name);
        System.out.println("拼音首字母: " + getInitials(name)); // 输出: ZS
        System.out.println("全拼: " + getFullPinyin(name)); // 输出: zhangsan
        System.out.println("缩写: " + getNameAbbreviation(name)); // 输出: ZS
    }
}